/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.utn.tpsimulacion02;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author aaltamir
 */
public class LibNormal {
    
    
    public static List<Double> generarNumerosBoxMuller(int cantidad){
        List<Double> listaNumeros = new ArrayList<Double>();
        for(int i =0; i<cantidad; i+=2){
            ParDeValores par =callBoxMuller();
            listaNumeros.add(par.getPar1());
            listaNumeros.add(par.getPar2());
        }
        return listaNumeros;
    }
    public static List<Double> generarNumerosConvolucion(int cantidad, int media, int ds){
        List<Double> listaNumeros = new ArrayList<Double>();
        for(int i =0; i<cantidad; i++){
            listaNumeros.add(callConvolucion(media, ds));
            
        }
        return listaNumeros;
    }
    
    private static ParDeValores callBoxMuller(){
        double rnd1=  Math.random();
        double rnd2 = Math.random();
        double x1 = Math.sqrt(-2*Math.log(rnd1)) *Math.cos(2*Math.PI*rnd2);
        double x2 = Math.sqrt(-2*Math.log(rnd1)) *Math.sin(2*Math.PI*rnd2);
        ParDeValores par = new ParDeValores(x1, x2);
        return par;
    }
    
    /*Modifique el for, acumule los RND y dsp hice la resta afuera... no se porque, pero de esta manera
     el grafico da una distribucion normal... fijense para media=4, ds=1 es casi perfecto el grafico,
     el unico inconveniente es que para altos valores de media (6,7,8, etc) el grafico se corta yno llga a mostrar
     la ultima parte...*/
    
    private static double callConvolucion(int media, int ds){
        
        double acu = 0;
        for(int i =0; i<11; i++){
            acu+= Math.random(); 
        }
        acu -=6; 
        acu*= ds;
        return acu + media;
        
    }
}
